//[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
/**
 *
 *	@file		imc_obj_list.h
 *	@brief		オブジェクトリスト	表示優先順位　タッチパネル判定優先順位などを管理
 *	@author		tomoya takahashi
 *	@data		2005.09.28
 *
 * イメージクリップでしか使用しないので、このシステム内に
 * アクセサリなどをつかむようの関数を宣言します。
 *
 */
//]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
#ifndef __IMC_OBJLIST_H__
#define __IMC_OBJLIST_H__


#undef GLOBAL
#ifdef	__IMC_OBJLIST_H_GLOBAL
#define	GLOBAL	/* */
#else
#define	GLOBAL	extern
#endif

//-----------------------------------------------------------------------------
/**
 *					定数宣言
*/
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
/**
 *					構造体宣言
*/
//-----------------------------------------------------------------------------
//-------------------------------------
//
//	オブジェクトリスト構造体
//
//=====================================
typedef struct __IMC_OBJLIST{
	void*	obj_data;
	int		flag;			// 使う側が上のワークが何なのかをチェックする
							// ためのフラグ

	struct __IMC_OBJLIST* next;	// 次のリスト
	struct __IMC_OBJLIST* prev;	// 前のリスト
} IMC_OBJLIST;

typedef void (*IMCOBJLIST_FUNC)( IMC_OBJLIST* work );

//-------------------------------------
//
//	オブジェクトリスト構造体
//
//=====================================
typedef struct {

	IMC_OBJLIST* plist;
	int	num;
} IMC_OBJLIST_TBL;


//-----------------------------------------------------------------------------
/**
 *					プロトタイプ宣言
*/
//-----------------------------------------------------------------------------
//----------------------------------------------------------------------------
/**
 *
 *	@brief	オブジェリストテーブルを初期化
 *
 *	@param	tbl		オブジェリストテーブル実態のポインタ
 *	@param	num		管理したいオブジェクト数
 *	@param	heap	使用するヒープ
 *
 *	@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void IMC_OBJLIST_TblInit( IMC_OBJLIST_TBL* tbl, int num, int heap );

//----------------------------------------------------------------------------
/**
 *
 *	@brief	オブジェリストテーブルの破棄
 *
 *	@param	tbl		オブジェクトリストテーブル実態のポインタ
 *
 *	@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void IMC_OBJLIST_TblDelete( IMC_OBJLIST_TBL* tbl );

//----------------------------------------------------------------------------
/**
 *
 *	@brief	オブジェリストデータ作成
 *
 *	@param	tbl		オブジェリストテーブル
 *	@param	work	オブジェワーク
 *	@param	flag	オブジェの定数	（重複注意）
 *
 *	@return	IMC_OBJLIST*	オブジェリスト
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL IMC_OBJLIST* IMC_OBJLIST_MakeObjList( IMC_OBJLIST_TBL* tbl, void* work, int flag );

//----------------------------------------------------------------------------
/**
 *
 *	@brief	オブジェリストデータ破棄
 *
 *	@param	obj		破棄するオブジェリスト
 *
 *	@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void IMC_OBJLIST_DeleteObjList( IMC_OBJLIST* obj );

//----------------------------------------------------------------------------
/**
 *
 *	@brief	リストに設定する
 *
 *	@param	work			データを設定するワーク
 *	@param	dummy			前のデータ
 *	@param	data			データ
 *	@param	flag			データ定数
 *
 *	@return
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void IMC_OBJLIST_Set( IMC_OBJLIST* work, IMC_OBJLIST* prev );

//----------------------------------------------------------------------------
/**
 *
 *	@brief	リストから削除
 *
 *	@param	obj		削除するリストデータ
 *
 *	@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void IMC_OBJLIST_Delete( IMC_OBJLIST* obj );

//----------------------------------------------------------------------------
/**
 *
 *	@brief	先頭ダミーデータにつながっているファイルを全て破棄する
 *
 *	@param	dummy	ダミーデータ
 *
 *	@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void IMC_OBJLIST_DeleteAll( IMC_OBJLIST* dummy );

#undef	GLOBAL
#endif		// __IMC_OBJLIST_H__
